With continued deployments of higher speed connectivity and new devices that leverage such connectivity, content providers are extending beyond static content to offer streaming content. Streaming content includes live or on-demand video streams and audio streams of sporting events, news, television programming, movies, and other such multimedia content. High speed data networks such as 3G and 4G wireless data networks (e.g., Worldwide Interoperability for Microwave Access (WiMAX) and Long Term Evolution (LTE)) and broadband wired data networks provide the medium through which the content is streamed to end user devices. These devices include cellular telephones, smartphones such as the iPhone®, tablet devices such as the iPad™, portable digital assistants (PDAs), notebook computing systems, laptop computing systems, and desktop computing systems as some examples.
However, in many instances, the connectivity and/or end user device resources do not provide an acceptable or high quality user experience when receiving and rendering streaming content. As a result, various enhancements have been made to the software and hardware that are used for streaming content to end users in an effort to improve the user experience.
Some software enhancements include improved codecs for encoding the streaming content. Specifically, these codes can reduce the network bandwidth required to stream content or reduce the processing power required to render the content with minimal impact to the content quality. Other software enhancements provide adaptive content streaming. Adaptive content streaming improves the user experience by adjusting the content stream in real-time based on network connectivity (e.g., bandwidth) and rendering performance. Specifically, the bitrate encoding for the content stream can be increased or decreased based on available or changing connectivity and resources. Microsoft's® Smooth Streaming is an Internet Information Services (IIS) Media Services extension that enables such adaptive streaming of content. To provide adaptive content streaming, the content provider encodes the streaming content at multiple quality levels using one or more different codecs. The encoded content is fragmented into chunks of particular durations (e.g., two seconds). When an end user requests the content, the content is passed in chunks with increasing quality levels in order to determine the highest quality that can be sent to the end user within an acceptable level of performance (e.g., network performance or rendering performance). As conditions changes (e.g., network bandwidth decreases or increases or less processor cycles are available), the quality of the stream is adapted to the changing conditions in order to provide an uninterrupted continuous stream.
Improvements to the user experience can also be made by enhancing the hardware that streams content to the end users. One such example is the use of content delivery networks (CDNs) to stream content to the end users. CDNs have improved the user experience by providing decentralized and localized hardware from which to stream content to the end users. In so doing, content is streamed with less latency and less jitter to the end users as the content is streamed from geographically closer locations than when streaming the content from servers of a content provider. Moreover, the CDN provides an infrastructure with sufficient resources to stream the content to a large number of end users. Streaming to such a large number of end users would not be possible with the content provider's own infrastructure because the content provider's own infrastructure often does not include sufficient resources to perform such streaming.
To leverage resources of a CDN, content providers publish their content streams to an ingest server of the CDN. The ingest server makes the streaming content available to a distributed set of edge servers that are geographically positioned at high traffic locations of the data network. An end user requests streaming content from an edge server that is geographically closest to the end user or from an edge server that otherwise optimally distributes content to the end user. Based on the end user request, the edge server contacts, receives, and passes a desired content stream from the ingest server to the end user. In this manner, the end user requests are distributed over multiple edge servers such that no single server (e.g., ingest server or content provider server) is overwhelmed with end user requests. Moreover, the edge servers cache the streaming content to redistribute to end users that subsequently request the same content from the same edge servers. In this manner, no single server is overwhelmed with streaming content to all requesting end users.
While the CDN provides various improvements in the user experience, there is a need to further enhance the CDN. Current CDNs are susceptible to scalability issues and lack appropriate redundancy to ensure a continuous user experience in the presence of network or server failure. With regards to scalability, when one or more content providers publish too many streams to a single ingest server, the performance of the entire CDN is degraded which can cause interruption when streaming content to the end users. With regards to redundancy, when an ingest server or a network link to the ingest server fails, all content streams published to that ingest server may temporarily become unavailable.
Therefore, there is need to provide scalability within a content streaming system, such as a CDN, so that the content streaming system is able to distribute any number of content streams from any number of content providers without creating bottlenecks within the content streaming system. There is further a need to provide redundancy and failover within the content streaming system such that a network failure or server failure does not interrupt content that is streamed from the content streaming system to the end users.